package com.jn.goods.controller;

import com.alibaba.fastjson.JSON;
import com.jn.goods.entity.Brand;
import org.springframework.web.bind.annotation.*;
import java.util.Map;


/**
 * Controller层中，接收页面请求参数时，参数注解对比
 *      @RequestParam  接收页面URL上参数或表单提交的数据
 *      @RequestBody  接收页面Json格式的数据
 *      @ModelAttribute  接收页面URL上参数或表单提交的数据
 */
@RestController
@RequestMapping("/test")
public class TestController {
	
	/****@RequestBody测试（当调用方请求数据，是通过请求body体请求并且数据格式是JSON格式时，使用@RequestBody注解）****/
    //等同于@RequestMapping(method = RequestMethod.GET)
    //@RequestBody对应方法上的参数类型是对象或者MAP都可以
    @GetMapping("/reqBodyGet")
    public String reqBodyGet(@RequestBody Map<String,String> brand){
        System.out.println("1=====@RequestBody - Get解析参数数据：" + JSON.toJSONString(brand));
        return "reqBodyGet 请求成功";
    }

    //等同于@RequestMapping(method = RequestMethod.POST)
    //@RequestBody对应方法上的参数类型是对象或者MAP都可以
    @PostMapping("/reqBodyPost")
    public String reqBodyPost(@RequestBody Brand brand){
        System.out.println("2=====@RequestBody - Post解析参数数据：" + JSON.toJSONString(brand));
        return "reqBodyPost 请求成功";
    }


   /****@RequestParam（当调用方请求数据，是通过GET方式的URL参数请求比如http://a.com/?name=zhangsan&age=12 或者 是通过POST方式的表单提交数据请求比如管理后台表单新增账号信息 时，第一种方式：可以使用@RequestParam注解）****/
    //等同于@RequestMapping(method = RequestMethod.GET)
    //如果用@RequestParam，那么接收全部数据参数类型可以是MAP，接收单个参数则需要指定接收的参数名.方法上的参数类型可以是集合类型（Map,list,arr）常用数据类型（int long string等），不能是对象类型比如brand
    @GetMapping("/reqParamGet")
    public String reqParamGet(@RequestParam Map<String,String> brand){
        System.out.println("3 =====@RequestParam - Get解析参数数据：" + JSON.toJSONString(brand));
        return "reqParamGet 请求成功";
    }

    //等同于@RequestMapping(method = RequestMethod.POST)
    //如果用@RequestParam，那么接收全部数据参数类型可以是MAP，接收单个参数则需要指定接收的参数名.方法上的参数类型可以是集合类型（Map,list,arr）常用数据类型（int long string等），不能是对象类型比如brand
    @PostMapping("/reqParamPost")
    public String reqParamPost(@RequestParam int id, @RequestParam String name, @RequestParam String letter){
        System.out.println("4 =====@RequestParam - Post解析参数数据：" +  id + "=" + name + "=" + letter);
        return "reqParamPost 请求成功";
    }




   /****（当调用方请求数据，是通过GET方式的URL参数请求比如http://a.com/?name=zhangsan&age=12
    * 或者 是通过POST方式的表单提交数据请求比如管理后台表单新增账号信息 时，第二种方式：可以使用@ModelAttribute注解）****/
    //如果用@ModelAttribute，那么接收的数据需要全部转为brand对象，不能转为MAP
    @RequestMapping("/reqModel")
    public String reqModel(@ModelAttribute Brand brand){
        System.out.println("5 =====@ModelAttribute 解析参数数据：" + JSON.toJSONString(brand));
        return "reqModel 请求成功";
    }


    /****当使用PSOT请求表单数据提交时，可以不加任何注解，直接用对象类型接收****/
    @PostMapping("/reqPostForm")
    public String reqPostForm(Brand brand){
        System.out.println("6 =====无注解直接解析参数数据：" + JSON.toJSONString(brand));
        return "reqParamPost 请求成功";
    }
}
